package com.foreknow.demo16;

/**
 * 1.方法的参数可以是父类型(抽象类)
 */
public class TestMethod {

    /**
     * 参数是类  父型
     * @param d
     */
    public void methodA(D d) {
        d.fly();
    }

    /**
     * 返回值是 类 父型
     * @return
     */
    public D methodB() {
        D d = new SubD();
        return d;
    }

    /**
     * 参数是接口  父型
     * @param b
     */
    public void methodC(B b) {
        b.walk();
    }


    /**
     * 返回值是 接口 父型
     * @return
     */
    public B methodD() {
        B b = new BImpl();
        return b;
    }

    public static void main(String[] args) {
        TestMethod testMethod = new TestMethod();

        //    D d = new SubD();
        //    testMethod.methodA(d);


        //    D d = testMethod.methodB();
        //    d.fly();


        //    B b = new BImpl();
        //    testMethod.methodC(b);


        B b = testMethod.methodD();
        b.walk();
    }
}